<script lang="ts" setup>
import { findHot } from '@/api/home'
import type { IHotList } from '@/types/api/home'
import { ref } from 'vue'
import HomePanel from './home-panel.vue'
import HomeSkeleton from './home-skeleton.vue'
import { useLazyData } from '@/hooks/useLazyData'
import type { MaybeElement } from '@vueuse/core'

// 获取人气推荐数据
const goods = ref<IHotList[]>([])
const getGoodHot = () => {
  findHot().then((res) => {
    goods.value = res.data.result
  })
}

// 获取到需要懒加载的元素
const target = ref<MaybeElement>()
// 调用数据懒加载的方法
useLazyData(target, getGoodHot)
</script>

<template>
  <HomePanel title="人气推荐" sub-title="人气爆款 不容错过">
    <div ref="target" style="position: relative; height: 426px">
      <Transition name="fade">
        <ul v-if="goods.length" ref="pannel" class="goods-list">
          <li v-for="item in goods" :key="item.id">
            <RouterLink to="/">
              <img :src="item.picture" alt="" />
              <p class="name">{{ item.title }}</p>
              <p class="desc">{{ item.alt }}</p>
            </RouterLink>
          </li>
        </ul>
        <HomeSkeleton v-else />
      </Transition>
    </div>
  </HomePanel>
</template>

<style lang="scss" scoped>
.goods-list {
  display: flex;
  justify-content: space-between;
  height: 426px;
  li {
    width: 306px;
    height: 406px;
    @include hoverShadow;
    img {
      width: 306px;
      height: 306px;
    }
    p {
      font-size: 22px;
      padding-top: 12px;
      text-align: center;
    }
    .desc {
      color: #999;
      font-size: 18px;
    }
  }
}
</style>
